/*
 * @Description:
 * @Author: cgt
 * @Date: 2021-12-23 14:05:56
 * @LastEditors: cgt
 * @LastEditTime: 2021-12-28 19:14:08
 */
/**
 * @module utils/RandomUtil
 * @desc 随机生成工具
 */

import { v4 as uuidv4 } from 'uuid';

/**
 * 获取最大最小值之间的随机数
 * @param {number} min 最小值
 * @param {number} max 最大值
 */
function random(min, max) {
  var _min = min;
  var _max = max;
  if (_min > _max) {
    // eslint-disable-next-line no-bitwise
    _min = (_max ^= _min ^= _max) ^ _min;
  }
  return Math.random() * (_max - _min) + _min;
}

/**
 * 根据范围随机生成点坐标
 * @param {*} extent [xmin, ymin, xmax, ymax]
 */
export function randomPoint(extent) {
  var xmin = extent[0],
    ymin = extent[1],
    xmax = extent[2],
    ymax = extent[3];
  return [random(xmin, xmax), random(ymin, ymax)];
}

/**
 * 根据范围随机生成线坐标
 * @param {Array} extent [xmin, ymin, xmax, ymax]
 * @param {Number} count 点数目
 */
export function randomLineString(extent, count) {
  var result = [];
  for (let i = 0; i < count; i++) {
    result.push(randomPoint(extent));
  }
  return result;
}

/**
 * 根据范围随机生成多边形坐标
 * @param {Array} extent [xmin, ymin, xmax, ymax]
 * @param {Number} count 点数目
 */
export function randomPolygon(extent, count) {
  var result = [];
  for (let i = 0; i < count; i++) {
    result.push(randomPoint(extent));
  }
  result.push(result[0]);
  // 单环
  return [result];
}

/**
 * 生成UUID
 */
export function randomUUID() {
  return uuidv4();
}

/**
 * 生成随机颜色
 */
export function randomHexColor() {
  return (
    '#' +
    Math.random()
      .toString(16)
      .substr(-6)
  );
}

